//
// TcpServerParams.h
//
// $Id: //poco/1.4/Net/include/Poco/Net/TcpServerParams.h#1 $
//
// Library: Net
// Package: TcpServer
// Module:  TcpServerParams
//
// Definition of the TcpServerParams class.
//
// Copyright (c) 2005-2007, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// SPDX-License-Identifier:	BSL-1.0
//


#ifndef Net_TcpServerParams_INCLUDED
#define Net_TcpServerParams_INCLUDED


#include "Poco/Net/Net.h"
#include "Poco/RefCountedObject.h"
#include "Poco/Timespan.h"
#include "Poco/Thread.h"
//#include "Poco/ThreadPriority.h"


namespace Poco {
namespace Net {


class Net_API TcpServerParams: public Poco::RefCountedObject
	/// This class is used to specify parameters to both the
	/// TcpServer, as well as to TcpServerDispatcher objects.
	///
	/// Subclasses may add new parameters to the class.
{
public:
	TcpServerParams();
		/// Creates the TcpServerParams.
		///
		/// Sets the following default values:
		///   - threadIdleTime:       10 seconds
		///   - maxThreads:           0
		///   - maxQueued:            64

	void setThreadIdleTime(const Poco::Timespan& idleTime);
		/// Sets the maximum idle time for a thread before
		/// it is terminated.
		///
		/// The default idle time is 10 seconds;
		
	const Poco::Timespan& getThreadIdleTime() const;
		/// Returns the maximum thread idle time.

	void setMaxQueued(int count);
		/// Sets the maximum number of queued connections.
		/// Must be greater than 0.
		///
		/// If there are already the maximum number of connections
		/// in the queue, new connections will be silently discarded.
		///
		/// The default number is 64.
		
	int getMaxQueued() const;
		/// Returns the maximum number of queued connections.

	void setMaxThreads(int count);
		/// Sets the maximum number of simultaneous threads
		/// available for this TcpServerDispatcher.
		///
		/// Must be greater than or equal to 0.
		/// If 0 is specified, the TcpServerDispatcher will
		/// set this parameter to the number of available threads
		/// in its thread pool.
		///
		/// The thread pool used by the TcpServerDispatcher
		/// must at least have the capacity for the given
		/// number of threads.
		
	int getMaxThreads() const;
		/// Returns the maximum number of simultaneous threads
		/// available for this TcpServerDispatcher.	
		
	void setThreadPriority(ThreadPriority prio);
		/// Sets the priority of Tcp server threads 
		/// created by TcpServer.
		
	ThreadPriority getThreadPriority() const;
		/// Returns the priority of Tcp server threads
		/// created by TcpServer. 

protected:
	virtual ~TcpServerParams();
		/// Destroys the TcpServerParams.

private:
	Poco::Timespan 		m_threadIdleTime;
	int 				m_maxThreads;
	int 				m_maxQueued;
	ThreadPriority 		m_threadPriority;
};


//
// inlines
//
inline const Poco::Timespan& TcpServerParams::getThreadIdleTime() const
{
	return m_threadIdleTime;
}


inline int TcpServerParams::getMaxThreads() const
{
	return m_maxThreads;
}


inline int TcpServerParams::getMaxQueued() const
{
	return m_maxQueued;
}


inline ThreadPriority TcpServerParams::getThreadPriority() const
{
	return m_threadPriority;
}


} } // namespace Poco::Net


#endif // Net_TcpServerParams_INCLUDED
